home *** CD-ROM | disk | FTP | other *** search
/ isnet Internet / Isnet Internet CD.iso / prog / hiz / 09 / 09.exe / adynware.exe / perl / lib / cacheout.pl < prev    next >
Encoding:
Perl Script  |  1999-12-28  |  807 b   |  44 lines

  1.  
  2. sub cacheout'open {
  3.     open($_[0], $_[1]);
  4. }
  5.  
  6.  
  7. sub cacheout'close {
  8.     close($_[0]);
  9. }
  10.  
  11.  
  12. sub cacheout {
  13.     package cacheout;
  14.  
  15.     ($file) = @_;
  16.     if (!$isopen{$file}) {
  17.     if (++$numopen > $maxopen) {
  18.         local(@lru) = sort {$isopen{$a} <=> $isopen{$b};} keys(%isopen);
  19.         splice(@lru, $maxopen / 3);
  20.         $numopen -= @lru;
  21.         for (@lru) { &close($_); delete $isopen{$_}; }
  22.     }
  23.     &open($file, ($saw{$file}++ ? '>>' : '>') . $file)
  24.         || die "Can't create $file: $!\n";
  25.     }
  26.     $isopen{$file} = ++$seq;
  27. }
  28.  
  29. package cacheout;
  30.  
  31. $seq = 0;
  32. $numopen = 0;
  33.  
  34. if (open(PARAM,'/usr/include/sys/param.h')) {
  35.     local($_, $.);
  36.     while (<PARAM>) {
  37.     $maxopen = $1 - 4 if /^\s*#\s*define\s+NOFILE\s+(\d+)/;
  38.     }
  39.     close PARAM;
  40. }
  41. $maxopen = 16 unless $maxopen;
  42.  
  43. 1;
  44.